<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- <script type="text/javascript">

        function test() {
            var arr = [];
            for (var i = 0; i < 10; i++) {
                arr[i] = function () { //如果不执行函数，系统不会看函数体里面
                    // arr[i] 里面的i每次都套现了
                    console.log(i);
                }
            }
            return arr;// 以当前test的AO为底，返回函数引用
        }

        var myArr = test();

        for (var j = 0; j < 10; j++) {
            myArr[j]();
        }

    </script> -->

    <!-- 上面问题的解决办法，做到输出0-9 -->
    <script>
        //非常重要
        function test() {
            var arr = [];
            for (var i = 0; i < 10; i++) {
                (function(j){
                    arr[j] = function () { 
                        console.log(j);
                    }

                }(i));  // 对每个i都执行立即执行函数，然后在立即执行函数中定义函数，以立即执行函数的AO为底
            }   
            return arr;
        }

        var myArr = test();

        for (var j = 0; j < 10; j++) {
            myArr[j]();
        }

    </script>
</body>
</html>